<%@ page import="com.test.tagtest.Person" %>
<%@ page import="com.test.tagtest.PersonComparator" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Date" %>
<%@ page import="java.util.List" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%--
  Created by IntelliJ IDEA.
  User: lzy
  Date: 2018/9/9
  Time: 12:43
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Tag test</title>
</head>
<body>
<s:debug/>
<br/>
s:property:打印值栈中的属性值的：对于对象栈，打印值栈中对象的属性值
<br/>
<s:property value="productName"/>
<br/><br/>
对于Map栈，打印request, session, application的某个属性值或某个请求参数的值。
<br/>
<s:property value="#application.date"/>
<br/>
打印请求属性值
<s:property value="#parameters.name[0]"/>
<hr/>
s:url 创建一个URL字符串的
<s:url value="/getProduct" var="url1">
    <%--指定url包含的请求参数，2002不可能是一个属性名，struts2把2002直接作为属性值--%>
    <s:param name="productId" value="2002"/>
    <s:param name="date" value="#application.date"/>
</s:url>

${url1}
<br/><br/>
s:url 创建一个URL字符串的
<s:url value="/getProduct" var="url2">
    <%--对于value值会自动进行OGNL解析--%>
    <s:param name="productId" value="productId"/>
</s:url>
${url2}

<br/><br/>
s:url 创建一个URL字符串的
<s:url value="/getProduct" var="url3">
    <%--对于value值会自动进行OGNL解析，若不希望进行OGNL解析，则使用单引号引起来--%>
    <s:param name="productId" value="'abadfadsf'"/>
</s:url>
${url3}
<br/><br/>
<%--构建一个请求action的地址--%>
<s:url action="testAction" namespace="/helloworld" method="save" var="url4"/>
${url4}
<br/><br/>
<s:url value="testUrl" var="url5" includeParams="all"/>
${url5}
<hr/>
s:set: 向page, request, session, application域对象中加入一个属性值
<br/><br/>
<%--对value属性值自动进行OGNL解析--%>
<s:set name="productName" value="productName" scope="page"/>
productName:&nbsp;&nbsp;${pageScope.productName}
<br/><br/>
s:push: 把一个对象在标签开始后压入到值栈中，标签结束时，弹出值栈
<br>
<%
    Person person = new Person();
    person.setName("atguigu");
    person.setAge(10);
    request.setAttribute("person", person);
%>
<s:push value="#request.person">
    标签开始后：${name}
</s:push>
<br/>
标签结束后：--${name}--

<hr/>
s:if,s:else,s:elseif
<br/><br/>
productPrice:<s:property value="productPrice"/>
<%--可以直接使用值栈中的属性--%>
<br/>
<s:if test="productPrice > 1000">
    i7处理器
</s:if>
<s:elseif test="productPrice > 800">
    i5处理器
</s:elseif>
<s:else>
    i3处理器
</s:else>
<br/>
<s:if test="#request.person.age >10">
    大于10岁
</s:if>
<s:elseif test="#request.person.age >6">
    大于6岁小于10岁
</s:elseif>
<s:else>
    小于6岁
</s:else>
<hr/>
s:iterator: 遍历集合的。把这个可遍历对象里的每一个元素依次压入和弹出
<br/>
<%
    List<Person> persons = new ArrayList<>();
    persons.add(new Person("xiaowang", 12));
    persons.add(new Person("xiaoli", 16));
    persons.add(new Person("xiaohong", 22));
    persons.add(new Person("xiaofang", 9));
    request.setAttribute("persons", persons);
%>
<s:iterator value="#request.persons" status="status">
    index:${status.index}-${status.count}: ${name}-${age}<br>
</s:iterator>
<br/>
遍历内部变量
<br/>
<s:iterator value="persons">
    ${name}:${age}<br>
</s:iterator>
<hr/>
s:sort 可以对集合总的元素进行排序
<br/>
<%
    PersonComparator comparator = new PersonComparator();
    request.setAttribute("comparator", comparator);
%>
<s:sort comparator="#request.comparator" source="persons" var="persons2"/>
<s:iterator value="#attr.persons2">
    ${name}:${age}<br/>
</s:iterator>
<hr/>
s:date可以对Date对象进行排版
<%
    Date dt = new Date();
    session.setAttribute("dt", dt);
%>
<br/>
<s:date name="#session.dt" format="yyyy-MM-dd hh:mm:ss" var="dt2"/>
date:${dt2}
<hr/>
<s:iterator value="persons">
    <%--可以使用%{}把属性包装起来，使其进行强制的OGNL解析--%>
    <s:a href="getPerson.action?name=%{name}">${name}</s:a>
</s:iterator>
<br/><br/>
<br/><br/>
<br/><br/>

</body>
</html>
